package Q8_09_Parens; import java.util.ArrayList; public class QuestionB { public static void addParen(ArrayList<String> list, int leftRem, int rightRem, char[] str, int index) { if (leftRem < 0 || rightRem < leftRem) return; // invalid state if (leftRem == 0 && rightRem == 0) { /* all out of left and right parentheses */ list.add(String.copyValueOf(str)); } else { str[index] = '('; // Add left and recurse addParen(list, leftRem - 1, rightRem, str, index + 1); str[index] = ')'; // Add right and recurse addParen(list, leftRem, rightRem - 1, str, index + 1); } } public static ArrayList<String> generateParens(int count) { char[] str = new char[count*2]; ArrayList<String> list = new ArrayList<String>(); addParen(list, count, count, str, 0); return list; } public static void main(String[] args) { ArrayList<String> list = generateParens(6); for (String s : list) { System.out.println(s); } System.out.println(list.size()); } }